package model.value;

/**
 * Interface encapsulant la notion de version (une valeur entière associée à un numéro de version). Ce mécanisme de version est utilisé dans chacun des trois 
 * algorithmes de diffusion bien qu'il ne soit réellement nécessaire que pour l'algorithme de diffusion par époques.
 */
public interface VersionnedValue {

	/**
	 * Récupération de la valeur courante.
	 * @return	La valeur courante.
	 */
	public int getValue();
	
	/**
	 * Modifie la valeur courante.
	 * @param value	La nouvelle valeur courante.
	 */
	public void setValue(int value);
		
	/**
	 * Modifie la version courante de la valeur.
	 * @return	La version courante de la valeur.
	 */
	public int getVersion();
	
	/**
	 * Modifie la version courante de la valeur.
	 * @param version	La nouvelle version courante de la valeur.
	 */
	public void setVersion(int version);

	/**
	 * Récupération d'une copie de la valeur courante, associée à sa version
	 * @return	Une copie de la valeur courante, associée à sa version.
	 */
	public VersionnedValue copy();
	
}
